/*
 * Copyright 2018 JDCLOUD.COM
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http:#www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * JCLOUD IoT Engine API
 * API related to IoT Engine
 *
 * OpenAPI spec version: v2
 * Contact: 
 *
 * NOTE: This class is auto generated by the jdcloud code generator program.
 */


using JDCloudSDK.Core.Auth;
using JDCloudSDK.Core.Client;
using JDCloudSDK.Core.Http;
using JDCloudSDK.Iotcore.Apis;
using JDCloudSDK.Iotcore.Model;
using System;
using System.Collections.Generic;
using System.Text;
#if NET40||NET35
#else
using System.Threading.Tasks;
#endif

namespace JDCloudSDK.Iotcore.Client
{
    /// <summary>
    ///  JCLOUD IoT Engine API
    ///  API related to IoT Engine
    ///  Iotcore Api 客户端
    ///</summary>
    public class IotcoreClient : JdcloudClient
    {

        /// <summary>
        ///  默认私有构造函数
        /// </summary>
        private IotcoreClient()
        {

        }

        /// <summary>
        /// 默认构造函数
        /// </summary>
        /// <param name="credentialsProvider">认证信息</param>
        /// <param name="httpRequestConfig">http 客户端配置信息</param>
        /// <param name="environment">sdk 环境配置信息</param>
        public IotcoreClient(CredentialsProvider credentialsProvider, HttpRequestConfig httpRequestConfig,SDKEnvironment environment)
        {
            this.httpRequestConfig = httpRequestConfig;
            this.credentialsProvider = credentialsProvider;
            this.environment = environment;
        }

        /// <summary>
        /// 默认构造函数
        /// </summary>
        /// <param name="httpRequestConfig">http 客户端配置信息</param>
        /// <param name="credentialsProvider">认证信息</param>
        public IotcoreClient(CredentialsProvider credentialsProvider,HttpRequestConfig httpRequestConfig)
        {
            this.httpRequestConfig = httpRequestConfig;
            this.credentialsProvider = credentialsProvider;
        }

        /// <summary>
        /// 默认构造函数，
        /// 注意如果使用此方法 httpRequestConfig 使用的http 请求 schema 为Https
        /// </summary>
        /// <param name="credentialsProvider">认证信息</param>
        public IotcoreClient(CredentialsProvider credentialsProvider)
        {
            this.credentialsProvider = credentialsProvider;
        }

        /// <summary>
        ///  版本号 1.2.3
        ///</summary>
        public const string ClientVersion = "1.2.3";

        private const string apiVersion = "v2";
        private const string userAgentPrefix = "JdcloudSdkDotNet";
        private const string defaultEndpoint = "iotcore.jdcloud-api.com";
        private const string serviceName = "iotcore";
        private const string userAgent = userAgentPrefix + "/" + ClientVersion + " " + serviceName + "/" + apiVersion;


        private SDKEnvironment environment = new SDKEnvironment(defaultEndpoint);
        private CredentialsProvider credentialsProvider;
        private HttpRequestConfig httpRequestConfig;

        /// <summary>
        ///  获取证书信息
        ///</summary>
        public override CredentialsProvider CredentialsProvider   { get { return credentialsProvider; } }

        /// <summary>
        ///  获取http 客户端配置信息
        ///</summary>
        public override HttpRequestConfig HttpRequestConfig { get { return httpRequestConfig; } }

        /// <summary>
        ///  获取sdk环境配置信息
        ///</summary>
        public override SDKEnvironment SDKEnvironment { get { return environment; } }

        /// <summary>
        ///  获取用户自定义浏览器识别字符串
        ///</summary>
        public override string UserAgent { get { return userAgent; } }

        /// <summary>
        ///  获取服务名称
        ///</summary>
        public override string ServiceName { get { return serviceName; } }

        /// <summary>
        ///  获取版本号
        ///</summary>
        public override string Version { get { return apiVersion; } }



#if NET40||NET35
        /// <summary>
        ///  查看所有产品的列表
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public ListProductsWithAdminResponse ListProductsWithAdmin(ListProductsWithAdminRequest request) {
            return  new ListProductsWithAdminExecutor().Client(this).Execute<ListProductsWithAdminResponse, ListProductsWithAdminResult, ListProductsWithAdminRequest>(request);
        }
#else
        /// <summary>
        ///  查看所有产品的列表
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<ListProductsWithAdminResponse> ListProductsWithAdmin(ListProductsWithAdminRequest request) {
            return await new ListProductsWithAdminExecutor().Client(this).Execute<ListProductsWithAdminResponse, ListProductsWithAdminResult, ListProductsWithAdminRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  设备事件查询
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeEventListResponse DescribeEventList(DescribeEventListRequest request) {
            return  new DescribeEventListExecutor().Client(this).Execute<DescribeEventListResponse, DescribeEventListResult, DescribeEventListRequest>(request);
        }
#else
        /// <summary>
        ///  设备事件查询
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeEventListResponse> DescribeEventList(DescribeEventListRequest request) {
            return await new DescribeEventListExecutor().Client(this).Execute<DescribeEventListResponse, DescribeEventListResult, DescribeEventListRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  写入采集器数据
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public CollectorWriteMessageResponse CollectorWriteMessage(CollectorWriteMessageRequest request) {
            return  new CollectorWriteMessageExecutor().Client(this).Execute<CollectorWriteMessageResponse, CollectorWriteMessageResult, CollectorWriteMessageRequest>(request);
        }
#else
        /// <summary>
        ///  写入采集器数据
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<CollectorWriteMessageResponse> CollectorWriteMessage(CollectorWriteMessageRequest request) {
            return await new CollectorWriteMessageExecutor().Client(this).Execute<CollectorWriteMessageResponse, CollectorWriteMessageResult, CollectorWriteMessageRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  边缘代理设备与非直连设备拓扑关系创建接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public CreateDeviceTopoResponse CreateDeviceTopo(CreateDeviceTopoRequest request) {
            return  new CreateDeviceTopoExecutor().Client(this).Execute<CreateDeviceTopoResponse, CreateDeviceTopoResult, CreateDeviceTopoRequest>(request);
        }
#else
        /// <summary>
        ///  边缘代理设备与非直连设备拓扑关系创建接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<CreateDeviceTopoResponse> CreateDeviceTopo(CreateDeviceTopoRequest request) {
            return await new CreateDeviceTopoExecutor().Client(this).Execute<CreateDeviceTopoResponse, CreateDeviceTopoResult, CreateDeviceTopoRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  设备服务调用
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public InvokeThingServiceResponse InvokeThingService(InvokeThingServiceRequest request) {
            return  new InvokeThingServiceExecutor().Client(this).Execute<InvokeThingServiceResponse, InvokeThingServiceResult, InvokeThingServiceRequest>(request);
        }
#else
        /// <summary>
        ///  设备服务调用
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<InvokeThingServiceResponse> InvokeThingService(InvokeThingServiceRequest request) {
            return await new InvokeThingServiceExecutor().Client(this).Execute<InvokeThingServiceResponse, InvokeThingServiceResult, InvokeThingServiceRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  删除产品
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DeleteProductWithAdminResponse DeleteProductWithAdmin(DeleteProductWithAdminRequest request) {
            return  new DeleteProductWithAdminExecutor().Client(this).Execute<DeleteProductWithAdminResponse, DeleteProductWithAdminResult, DeleteProductWithAdminRequest>(request);
        }
#else
        /// <summary>
        ///  删除产品
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DeleteProductWithAdminResponse> DeleteProductWithAdmin(DeleteProductWithAdminRequest request) {
            return await new DeleteProductWithAdminExecutor().Client(this).Execute<DeleteProductWithAdminResponse, DeleteProductWithAdminResult, DeleteProductWithAdminRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查看产品列表接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public ListProductsResponse ListProducts(ListProductsRequest request) {
            return  new ListProductsExecutor().Client(this).Execute<ListProductsResponse, ListProductsResult, ListProductsRequest>(request);
        }
#else
        /// <summary>
        ///  查看产品列表接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<ListProductsResponse> ListProducts(ListProductsRequest request) {
            return await new ListProductsExecutor().Client(this).Execute<ListProductsResponse, ListProductsResult, ListProductsRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  设备注册接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public RegisterDeviceResponse RegisterDevice(RegisterDeviceRequest request) {
            return  new RegisterDeviceExecutor().Client(this).Execute<RegisterDeviceResponse, RegisterDeviceResult, RegisterDeviceRequest>(request);
        }
#else
        /// <summary>
        ///  设备注册接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<RegisterDeviceResponse> RegisterDevice(RegisterDeviceRequest request) {
            return await new RegisterDeviceExecutor().Client(this).Execute<RegisterDeviceResponse, RegisterDeviceResult, RegisterDeviceRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查询单个设备详细信息
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeDeviceResponse DescribeDevice(DescribeDeviceRequest request) {
            return  new DescribeDeviceExecutor().Client(this).Execute<DescribeDeviceResponse, DescribeDeviceResult, DescribeDeviceRequest>(request);
        }
#else
        /// <summary>
        ///  查询单个设备详细信息
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeDeviceResponse> DescribeDevice(DescribeDeviceRequest request) {
            return await new DescribeDeviceExecutor().Client(this).Execute<DescribeDeviceResponse, DescribeDeviceResult, DescribeDeviceRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  修改产品
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public UpdateProductResponse UpdateProduct(UpdateProductRequest request) {
            return  new UpdateProductExecutor().Client(this).Execute<UpdateProductResponse, UpdateProductResult, UpdateProductRequest>(request);
        }
#else
        /// <summary>
        ///  修改产品
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<UpdateProductResponse> UpdateProduct(UpdateProductRequest request) {
            return await new UpdateProductExecutor().Client(this).Execute<UpdateProductResponse, UpdateProductResult, UpdateProductRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  属性获取接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribePropertySnapshotResponse DescribePropertySnapshot(DescribePropertySnapshotRequest request) {
            return  new DescribePropertySnapshotExecutor().Client(this).Execute<DescribePropertySnapshotResponse, DescribePropertySnapshotResult, DescribePropertySnapshotRequest>(request);
        }
#else
        /// <summary>
        ///  属性获取接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribePropertySnapshotResponse> DescribePropertySnapshot(DescribePropertySnapshotRequest request) {
            return await new DescribePropertySnapshotExecutor().Client(this).Execute<DescribePropertySnapshotResponse, DescribePropertySnapshotResult, DescribePropertySnapshotRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  设备方法执行
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public InvokeFunctionResponse InvokeFunction(InvokeFunctionRequest request) {
            return  new InvokeFunctionExecutor().Client(this).Execute<InvokeFunctionResponse, InvokeFunctionResult, InvokeFunctionRequest>(request);
        }
#else
        /// <summary>
        ///  设备方法执行
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<InvokeFunctionResponse> InvokeFunction(InvokeFunctionRequest request) {
            return await new InvokeFunctionExecutor().Client(this).Execute<InvokeFunctionResponse, InvokeFunctionResult, InvokeFunctionRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  更新设备影子的期望值
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public UpdateThingShadowResponse UpdateThingShadow(UpdateThingShadowRequest request) {
            return  new UpdateThingShadowExecutor().Client(this).Execute<UpdateThingShadowResponse, UpdateThingShadowResult, UpdateThingShadowRequest>(request);
        }
#else
        /// <summary>
        ///  更新设备影子的期望值
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<UpdateThingShadowResponse> UpdateThingShadow(UpdateThingShadowRequest request) {
            return await new UpdateThingShadowExecutor().Client(this).Execute<UpdateThingShadowResponse, UpdateThingShadowResult, UpdateThingShadowRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  删除产品
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DeleteProductResponse DeleteProduct(DeleteProductRequest request) {
            return  new DeleteProductExecutor().Client(this).Execute<DeleteProductResponse, DeleteProductResult, DeleteProductRequest>(request);
        }
#else
        /// <summary>
        ///  删除产品
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DeleteProductResponse> DeleteProduct(DeleteProductRequest request) {
            return await new DeleteProductExecutor().Client(this).Execute<DeleteProductResponse, DeleteProductResult, DeleteProductRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  (0x03)读保持寄存器
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public ReadHoldingRegistersResponse ReadHoldingRegisters(ReadHoldingRegistersRequest request) {
            return  new ReadHoldingRegistersExecutor().Client(this).Execute<ReadHoldingRegistersResponse, ReadHoldingRegistersResult, ReadHoldingRegistersRequest>(request);
        }
#else
        /// <summary>
        ///  (0x03)读保持寄存器
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<ReadHoldingRegistersResponse> ReadHoldingRegisters(ReadHoldingRegistersRequest request) {
            return await new ReadHoldingRegistersExecutor().Client(this).Execute<ReadHoldingRegistersResponse, ReadHoldingRegistersResult, ReadHoldingRegistersRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  获取协议信息
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public CollectorReadMessageResponse CollectorReadMessage(CollectorReadMessageRequest request) {
            return  new CollectorReadMessageExecutor().Client(this).Execute<CollectorReadMessageResponse, CollectorReadMessageResult, CollectorReadMessageRequest>(request);
        }
#else
        /// <summary>
        ///  获取协议信息
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<CollectorReadMessageResponse> CollectorReadMessage(CollectorReadMessageRequest request) {
            return await new CollectorReadMessageExecutor().Client(this).Execute<CollectorReadMessageResponse, CollectorReadMessageResult, CollectorReadMessageRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查看设备影子
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeThingShadowResponse DescribeThingShadow(DescribeThingShadowRequest request) {
            return  new DescribeThingShadowExecutor().Client(this).Execute<DescribeThingShadowResponse, DescribeThingShadowResult, DescribeThingShadowRequest>(request);
        }
#else
        /// <summary>
        ///  查看设备影子
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeThingShadowResponse> DescribeThingShadow(DescribeThingShadowRequest request) {
            return await new DescribeThingShadowExecutor().Client(this).Execute<DescribeThingShadowResponse, DescribeThingShadowResult, DescribeThingShadowRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  边缘代理设备与非直连设备拓扑关系删除接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DeleteDeviceTopoResponse DeleteDeviceTopo(DeleteDeviceTopoRequest request) {
            return  new DeleteDeviceTopoExecutor().Client(this).Execute<DeleteDeviceTopoResponse, DeleteDeviceTopoResult, DeleteDeviceTopoRequest>(request);
        }
#else
        /// <summary>
        ///  边缘代理设备与非直连设备拓扑关系删除接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DeleteDeviceTopoResponse> DeleteDeviceTopo(DeleteDeviceTopoRequest request) {
            return await new DeleteDeviceTopoExecutor().Client(this).Execute<DeleteDeviceTopoResponse, DeleteDeviceTopoResult, DeleteDeviceTopoRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  下载设备证书接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DownloadDeviceCertificateResponse DownloadDeviceCertificate(DownloadDeviceCertificateRequest request) {
            return  new DownloadDeviceCertificateExecutor().Client(this).Execute<DownloadDeviceCertificateResponse, DownloadDeviceCertificateResult, DownloadDeviceCertificateRequest>(request);
        }
#else
        /// <summary>
        ///  下载设备证书接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DownloadDeviceCertificateResponse> DownloadDeviceCertificate(DownloadDeviceCertificateRequest request) {
            return await new DownloadDeviceCertificateExecutor().Client(this).Execute<DownloadDeviceCertificateResponse, DownloadDeviceCertificateResult, DownloadDeviceCertificateRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  导出物模型
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public ExportThingModelResponse ExportThingModel(ExportThingModelRequest request) {
            return  new ExportThingModelExecutor().Client(this).Execute<ExportThingModelResponse, ExportThingModelResult, ExportThingModelRequest>(request);
        }
#else
        /// <summary>
        ///  导出物模型
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<ExportThingModelResponse> ExportThingModel(ExportThingModelRequest request) {
            return await new ExportThingModelExecutor().Client(this).Execute<ExportThingModelResponse, ExportThingModelResult, ExportThingModelRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  边缘代理设备与非直连设备拓扑关系查询接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeDeviceTopoResponse DescribeDeviceTopo(DescribeDeviceTopoRequest request) {
            return  new DescribeDeviceTopoExecutor().Client(this).Execute<DescribeDeviceTopoResponse, DescribeDeviceTopoResult, DescribeDeviceTopoRequest>(request);
        }
#else
        /// <summary>
        ///  边缘代理设备与非直连设备拓扑关系查询接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeDeviceTopoResponse> DescribeDeviceTopo(DescribeDeviceTopoRequest request) {
            return await new DescribeDeviceTopoExecutor().Client(this).Execute<DescribeDeviceTopoResponse, DescribeDeviceTopoResult, DescribeDeviceTopoRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  朗瑞分页查询设备信息,支持一个或多个条件
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public LoongrayQueryPageResponse LoongrayQueryPage(LoongrayQueryPageRequest request) {
            return  new LoongrayQueryPageExecutor().Client(this).Execute<LoongrayQueryPageResponse, LoongrayQueryPageResult, LoongrayQueryPageRequest>(request);
        }
#else
        /// <summary>
        ///  朗瑞分页查询设备信息,支持一个或多个条件
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<LoongrayQueryPageResponse> LoongrayQueryPage(LoongrayQueryPageRequest request) {
            return await new LoongrayQueryPageExecutor().Client(this).Execute<LoongrayQueryPageResponse, LoongrayQueryPageResult, LoongrayQueryPageRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  修改产品
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public UpdateProductWithAdminResponse UpdateProductWithAdmin(UpdateProductWithAdminRequest request) {
            return  new UpdateProductWithAdminExecutor().Client(this).Execute<UpdateProductWithAdminResponse, UpdateProductWithAdminResult, UpdateProductWithAdminRequest>(request);
        }
#else
        /// <summary>
        ///  修改产品
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<UpdateProductWithAdminResponse> UpdateProductWithAdmin(UpdateProductWithAdminRequest request) {
            return await new UpdateProductWithAdminExecutor().Client(this).Execute<UpdateProductWithAdminResponse, UpdateProductWithAdminResult, UpdateProductWithAdminRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查看产品
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeProductResponse DescribeProduct(DescribeProductRequest request) {
            return  new DescribeProductExecutor().Client(this).Execute<DescribeProductResponse, DescribeProductResult, DescribeProductRequest>(request);
        }
#else
        /// <summary>
        ///  查看产品
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeProductResponse> DescribeProduct(DescribeProductRequest request) {
            return await new DescribeProductExecutor().Client(this).Execute<DescribeProductResponse, DescribeProductResult, DescribeProductRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  修改设备详情
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public UpdateDeviceResponse UpdateDevice(UpdateDeviceRequest request) {
            return  new UpdateDeviceExecutor().Client(this).Execute<UpdateDeviceResponse, UpdateDeviceResult, UpdateDeviceRequest>(request);
        }
#else
        /// <summary>
        ///  修改设备详情
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<UpdateDeviceResponse> UpdateDevice(UpdateDeviceRequest request) {
            return await new UpdateDeviceExecutor().Client(this).Execute<UpdateDeviceResponse, UpdateDeviceResult, UpdateDeviceRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  注册单个朗讯设备并返回秘钥信息
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public AddLooDeviceResponse AddLooDevice(AddLooDeviceRequest request) {
            return  new AddLooDeviceExecutor().Client(this).Execute<AddLooDeviceResponse, AddLooDeviceResult, AddLooDeviceRequest>(request);
        }
#else
        /// <summary>
        ///  注册单个朗讯设备并返回秘钥信息
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<AddLooDeviceResponse> AddLooDevice(AddLooDeviceRequest request) {
            return await new AddLooDeviceExecutor().Client(this).Execute<AddLooDeviceResponse, AddLooDeviceResult, AddLooDeviceRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  导入物模型
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public ImportThingModelResponse ImportThingModel(ImportThingModelRequest request) {
            return  new ImportThingModelExecutor().Client(this).Execute<ImportThingModelResponse, ImportThingModelResult, ImportThingModelRequest>(request);
        }
#else
        /// <summary>
        ///  导入物模型
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<ImportThingModelResponse> ImportThingModel(ImportThingModelRequest request) {
            return await new ImportThingModelExecutor().Client(this).Execute<ImportThingModelResponse, ImportThingModelResult, ImportThingModelRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  建立设备间的父子关系
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public AddDeviceLinksResponse AddDeviceLinks(AddDeviceLinksRequest request) {
            return  new AddDeviceLinksExecutor().Client(this).Execute<AddDeviceLinksResponse, AddDeviceLinksResult, AddDeviceLinksRequest>(request);
        }
#else
        /// <summary>
        ///  建立设备间的父子关系
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<AddDeviceLinksResponse> AddDeviceLinks(AddDeviceLinksRequest request) {
            return await new AddDeviceLinksExecutor().Client(this).Execute<AddDeviceLinksResponse, AddDeviceLinksResult, AddDeviceLinksRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  注册单个设备并返回秘钥信息
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public AddDeviceResponse AddDevice(AddDeviceRequest request) {
            return  new AddDeviceExecutor().Client(this).Execute<AddDeviceResponse, AddDeviceResult, AddDeviceRequest>(request);
        }
#else
        /// <summary>
        ///  注册单个设备并返回秘钥信息
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<AddDeviceResponse> AddDevice(AddDeviceRequest request) {
            return await new AddDeviceExecutor().Client(this).Execute<AddDeviceResponse, AddDeviceResult, AddDeviceRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查看产品自定义Topic列表
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeProductTopicsResponse DescribeProductTopics(DescribeProductTopicsRequest request) {
            return  new DescribeProductTopicsExecutor().Client(this).Execute<DescribeProductTopicsResponse, DescribeProductTopicsResult, DescribeProductTopicsRequest>(request);
        }
#else
        /// <summary>
        ///  查看产品自定义Topic列表
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeProductTopicsResponse> DescribeProductTopics(DescribeProductTopicsRequest request) {
            return await new DescribeProductTopicsExecutor().Client(this).Execute<DescribeProductTopicsResponse, DescribeProductTopicsResult, DescribeProductTopicsRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查询方法调用列表信息
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeFunctionListResponse DescribeFunctionList(DescribeFunctionListRequest request) {
            return  new DescribeFunctionListExecutor().Client(this).Execute<DescribeFunctionListResponse, DescribeFunctionListResult, DescribeFunctionListRequest>(request);
        }
#else
        /// <summary>
        ///  查询方法调用列表信息
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeFunctionListResponse> DescribeFunctionList(DescribeFunctionListRequest request) {
            return await new DescribeFunctionListExecutor().Client(this).Execute<DescribeFunctionListResponse, DescribeFunctionListResult, DescribeFunctionListRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  新建产品
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public CreateProductResponse CreateProduct(CreateProductRequest request) {
            return  new CreateProductExecutor().Client(this).Execute<CreateProductResponse, CreateProductResult, CreateProductRequest>(request);
        }
#else
        /// <summary>
        ///  新建产品
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<CreateProductResponse> CreateProduct(CreateProductRequest request) {
            return await new CreateProductExecutor().Client(this).Execute<CreateProductResponse, CreateProductResult, CreateProductRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  删除设备
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public RemoveLoongrayDeviceResponse RemoveLoongrayDevice(RemoveLoongrayDeviceRequest request) {
            return  new RemoveLoongrayDeviceExecutor().Client(this).Execute<RemoveLoongrayDeviceResponse, RemoveLoongrayDeviceResult, RemoveLoongrayDeviceRequest>(request);
        }
#else
        /// <summary>
        ///  删除设备
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<RemoveLoongrayDeviceResponse> RemoveLoongrayDevice(RemoveLoongrayDeviceRequest request) {
            return await new RemoveLoongrayDeviceExecutor().Client(this).Execute<RemoveLoongrayDeviceResponse, RemoveLoongrayDeviceResult, RemoveLoongrayDeviceRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  设备删除接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DeleteDeviceResponse DeleteDevice(DeleteDeviceRequest request) {
            return  new DeleteDeviceExecutor().Client(this).Execute<DeleteDeviceResponse, DeleteDeviceResult, DeleteDeviceRequest>(request);
        }
#else
        /// <summary>
        ///  设备删除接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DeleteDeviceResponse> DeleteDevice(DeleteDeviceRequest request) {
            return await new DeleteDeviceExecutor().Client(this).Execute<DeleteDeviceResponse, DeleteDeviceResult, DeleteDeviceRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查询设备详情
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public QueryDeviceDetailResponse QueryDeviceDetail(QueryDeviceDetailRequest request) {
            return  new QueryDeviceDetailExecutor().Client(this).Execute<QueryDeviceDetailResponse, QueryDeviceDetailResult, QueryDeviceDetailRequest>(request);
        }
#else
        /// <summary>
        ///  查询设备详情
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<QueryDeviceDetailResponse> QueryDeviceDetail(QueryDeviceDetailRequest request) {
            return await new QueryDeviceDetailExecutor().Client(this).Execute<QueryDeviceDetailResponse, QueryDeviceDetailResult, QueryDeviceDetailRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  新建产品
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public CreateAdminProductResponse CreateAdminProduct(CreateAdminProductRequest request) {
            return  new CreateAdminProductExecutor().Client(this).Execute<CreateAdminProductResponse, CreateAdminProductResult, CreateAdminProductRequest>(request);
        }
#else
        /// <summary>
        ///  新建产品
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<CreateAdminProductResponse> CreateAdminProduct(CreateAdminProductRequest request) {
            return await new CreateAdminProductExecutor().Client(this).Execute<CreateAdminProductResponse, CreateAdminProductResult, CreateAdminProductRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  删除设备
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public RemoveDeviceResponse RemoveDevice(RemoveDeviceRequest request) {
            return  new RemoveDeviceExecutor().Client(this).Execute<RemoveDeviceResponse, RemoveDeviceResult, RemoveDeviceRequest>(request);
        }
#else
        /// <summary>
        ///  删除设备
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<RemoveDeviceResponse> RemoveDevice(RemoveDeviceRequest request) {
            return await new RemoveDeviceExecutor().Client(this).Execute<RemoveDeviceResponse, RemoveDeviceResult, RemoveDeviceRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查询物类型详情
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeThingTypeResponse DescribeThingType(DescribeThingTypeRequest request) {
            return  new DescribeThingTypeExecutor().Client(this).Execute<DescribeThingTypeResponse, DescribeThingTypeResult, DescribeThingTypeRequest>(request);
        }
#else
        /// <summary>
        ///  查询物类型详情
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeThingTypeResponse> DescribeThingType(DescribeThingTypeRequest request) {
            return await new DescribeThingTypeExecutor().Client(this).Execute<DescribeThingTypeResponse, DescribeThingTypeResult, DescribeThingTypeRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  新建产品自定义Topic
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public CreateProductTopicResponse CreateProductTopic(CreateProductTopicRequest request) {
            return  new CreateProductTopicExecutor().Client(this).Execute<CreateProductTopicResponse, CreateProductTopicResult, CreateProductTopicRequest>(request);
        }
#else
        /// <summary>
        ///  新建产品自定义Topic
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<CreateProductTopicResponse> CreateProductTopic(CreateProductTopicRequest request) {
            return await new CreateProductTopicExecutor().Client(this).Execute<CreateProductTopicResponse, CreateProductTopicResult, CreateProductTopicRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查看产品自定义Topic
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeProductTopicResponse DescribeProductTopic(DescribeProductTopicRequest request) {
            return  new DescribeProductTopicExecutor().Client(this).Execute<DescribeProductTopicResponse, DescribeProductTopicResult, DescribeProductTopicRequest>(request);
        }
#else
        /// <summary>
        ///  查看产品自定义Topic
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeProductTopicResponse> DescribeProductTopic(DescribeProductTopicRequest request) {
            return await new DescribeProductTopicExecutor().Client(this).Execute<DescribeProductTopicResponse, DescribeProductTopicResult, DescribeProductTopicRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查询属性接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribePropertyResponse DescribeProperty(DescribePropertyRequest request) {
            return  new DescribePropertyExecutor().Client(this).Execute<DescribePropertyResponse, DescribePropertyResult, DescribePropertyRequest>(request);
        }
#else
        /// <summary>
        ///  查询属性接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribePropertyResponse> DescribeProperty(DescribePropertyRequest request) {
            return await new DescribePropertyExecutor().Client(this).Execute<DescribePropertyResponse, DescribePropertyResult, DescribePropertyRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  边缘代理设备与非直连设备拓扑关系更新接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public UpdateDeviceTopoResponse UpdateDeviceTopo(UpdateDeviceTopoRequest request) {
            return  new UpdateDeviceTopoExecutor().Client(this).Execute<UpdateDeviceTopoResponse, UpdateDeviceTopoResult, UpdateDeviceTopoRequest>(request);
        }
#else
        /// <summary>
        ///  边缘代理设备与非直连设备拓扑关系更新接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<UpdateDeviceTopoResponse> UpdateDeviceTopo(UpdateDeviceTopoRequest request) {
            return await new UpdateDeviceTopoExecutor().Client(this).Execute<UpdateDeviceTopoResponse, UpdateDeviceTopoResult, UpdateDeviceTopoRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  分页查询设备信息,支持一个或多个条件
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public QueryDevicePageResponse QueryDevicePage(QueryDevicePageRequest request) {
            return  new QueryDevicePageExecutor().Client(this).Execute<QueryDevicePageResponse, QueryDevicePageResult, QueryDevicePageRequest>(request);
        }
#else
        /// <summary>
        ///  分页查询设备信息,支持一个或多个条件
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<QueryDevicePageResponse> QueryDevicePage(QueryDevicePageRequest request) {
            return await new QueryDevicePageExecutor().Client(this).Execute<QueryDevicePageResponse, QueryDevicePageResult, QueryDevicePageRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  根据物类型Code查看物模型完整信息
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeThingModelResponse DescribeThingModel(DescribeThingModelRequest request) {
            return  new DescribeThingModelExecutor().Client(this).Execute<DescribeThingModelResponse, DescribeThingModelResult, DescribeThingModelRequest>(request);
        }
#else
        /// <summary>
        ///  根据物类型Code查看物模型完整信息
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeThingModelResponse> DescribeThingModel(DescribeThingModelRequest request) {
            return await new DescribeThingModelExecutor().Client(this).Execute<DescribeThingModelResponse, DescribeThingModelResult, DescribeThingModelRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  设备控制接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public SetDevicePropertyResponse SetDeviceProperty(SetDevicePropertyRequest request) {
            return  new SetDevicePropertyExecutor().Client(this).Execute<SetDevicePropertyResponse, SetDevicePropertyResult, SetDevicePropertyRequest>(request);
        }
#else
        /// <summary>
        ///  设备控制接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<SetDevicePropertyResponse> SetDeviceProperty(SetDevicePropertyRequest request) {
            return await new SetDevicePropertyExecutor().Client(this).Execute<SetDevicePropertyResponse, SetDevicePropertyResult, SetDevicePropertyRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  设备Topic调用
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public InvokeThingTopicResponse InvokeThingTopic(InvokeThingTopicRequest request) {
            return  new InvokeThingTopicExecutor().Client(this).Execute<InvokeThingTopicResponse, InvokeThingTopicResult, InvokeThingTopicRequest>(request);
        }
#else
        /// <summary>
        ///  设备Topic调用
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<InvokeThingTopicResponse> InvokeThingTopic(InvokeThingTopicRequest request) {
            return await new InvokeThingTopicExecutor().Client(this).Execute<InvokeThingTopicResponse, InvokeThingTopicResult, InvokeThingTopicRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  修改设备详情
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public UpdateLooDeviceResponse UpdateLooDevice(UpdateLooDeviceRequest request) {
            return  new UpdateLooDeviceExecutor().Client(this).Execute<UpdateLooDeviceResponse, UpdateLooDeviceResult, UpdateLooDeviceRequest>(request);
        }
#else
        /// <summary>
        ///  修改设备详情
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<UpdateLooDeviceResponse> UpdateLooDevice(UpdateLooDeviceRequest request) {
            return await new UpdateLooDeviceExecutor().Client(this).Execute<UpdateLooDeviceResponse, UpdateLooDeviceResult, UpdateLooDeviceRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查看产品
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeProductWithAdminResponse DescribeProductWithAdmin(DescribeProductWithAdminRequest request) {
            return  new DescribeProductWithAdminExecutor().Client(this).Execute<DescribeProductWithAdminResponse, DescribeProductWithAdminResult, DescribeProductWithAdminRequest>(request);
        }
#else
        /// <summary>
        ///  查看产品
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeProductWithAdminResponse> DescribeProductWithAdmin(DescribeProductWithAdminRequest request) {
            return await new DescribeProductWithAdminExecutor().Client(this).Execute<DescribeProductWithAdminResponse, DescribeProductWithAdminResult, DescribeProductWithAdminRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查看产品功能列表接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public ListProductAbilitiesResponse ListProductAbilities(ListProductAbilitiesRequest request) {
            return  new ListProductAbilitiesExecutor().Client(this).Execute<ListProductAbilitiesResponse, ListProductAbilitiesResult, ListProductAbilitiesRequest>(request);
        }
#else
        /// <summary>
        ///  查看产品功能列表接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<ListProductAbilitiesResponse> ListProductAbilities(ListProductAbilitiesRequest request) {
            return await new ListProductAbilitiesExecutor().Client(this).Execute<ListProductAbilitiesResponse, ListProductAbilitiesResult, ListProductAbilitiesRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  设备基本数据统计，包括设备数，激活数，在线数
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public QueryAdminStatisticsResponse QueryAdminStatistics(QueryAdminStatisticsRequest request) {
            return  new QueryAdminStatisticsExecutor().Client(this).Execute<QueryAdminStatisticsResponse, QueryAdminStatisticsResult, QueryAdminStatisticsRequest>(request);
        }
#else
        /// <summary>
        ///  设备基本数据统计，包括设备数，激活数，在线数
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<QueryAdminStatisticsResponse> QueryAdminStatistics(QueryAdminStatisticsRequest request) {
            return await new QueryAdminStatisticsExecutor().Client(this).Execute<QueryAdminStatisticsResponse, QueryAdminStatisticsResult, QueryAdminStatisticsRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查询物类型列表
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeThingTypeListResponse DescribeThingTypeList(DescribeThingTypeListRequest request) {
            return  new DescribeThingTypeListExecutor().Client(this).Execute<DescribeThingTypeListResponse, DescribeThingTypeListResult, DescribeThingTypeListRequest>(request);
        }
#else
        /// <summary>
        ///  查询物类型列表
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeThingTypeListResponse> DescribeThingTypeList(DescribeThingTypeListRequest request) {
            return await new DescribeThingTypeListExecutor().Client(this).Execute<DescribeThingTypeListResponse, DescribeThingTypeListResult, DescribeThingTypeListRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  获取电梯运行状态
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public ElevatorOperatingStatusResponse ElevatorOperatingStatus(ElevatorOperatingStatusRequest request) {
            return  new ElevatorOperatingStatusExecutor().Client(this).Execute<ElevatorOperatingStatusResponse, ElevatorOperatingStatusResult, ElevatorOperatingStatusRequest>(request);
        }
#else
        /// <summary>
        ///  获取电梯运行状态
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<ElevatorOperatingStatusResponse> ElevatorOperatingStatus(ElevatorOperatingStatusRequest request) {
            return await new ElevatorOperatingStatusExecutor().Client(this).Execute<ElevatorOperatingStatusResponse, ElevatorOperatingStatusResult, ElevatorOperatingStatusRequest>(request).ConfigureAwait(false);
        }
#endif

            /// <summary>
            ///  默认IotcoreClient 构造器 接口
            ///</summary>
            public interface Builder
            {

                /// <summary>
                /// 设置认证信息参数
                /// </summary>
                /// <param name="provider">认证信息提供对象</param>
                /// <returns>iotcoreClient 构造器</returns>
                Builder CredentialsProvider(CredentialsProvider provider);

                /// <summary>
                /// 设置请求环境参数
                /// </summary>
                /// <param name="environment">环境参数信息</param>
                /// <returns>iotcoreClient 构造器</returns>
                Builder Environment(Core.Client.SDKEnvironment environment);

                /// <summary>
                /// http 请求配置信息
                /// </summary>
                /// <param name="config">http 请求配置信息</param>
                /// <returns>iotcoreClient 构造器</returns>
                Builder HttpRequestConfig(HttpRequestConfig config);

                /// <summary>
                ///  构造IotcoreClient 对象
                ///</summary>
                IotcoreClient Build();
            }

            /// <summary>
            ///  默认IotcoreClient 构造器
            ///</summary>
            public class DefaultBuilder : Builder
            {
                /// <summary>
                ///  IotcoreClient service client
                /// </summary>
                private  IotcoreClient iotcoreClient;

                /// <summary>
                ///  默认IotcoreClient 构造器构造对象
                ///</summary>
                public DefaultBuilder()
                {
                    iotcoreClient = new IotcoreClient();
                }

                /// <summary>
                ///  构造IotcoreClient 对象
                ///</summary>
                public IotcoreClient Build()
                {
                    if (iotcoreClient.CredentialsProvider == null)
                    {
                        //if credentialsProvider not set, try load jdcloud global default  credentials provider
                        iotcoreClient.credentialsProvider = JdCloud.DefaultInstance.GetCredentialsProvider();
                        if (iotcoreClient.credentialsProvider == null)
                        {
                            throw new ArgumentNullException("IotcoreClient build error: jdcloud credentials provider not set");
                        }
                    }
                    if (iotcoreClient.HttpRequestConfig == null)
                    {
                        iotcoreClient.httpRequestConfig = JdCloud.DefaultInstance.GetHttpRequestConfig();
                        if (iotcoreClient.httpRequestConfig == null)
                        {
                        throw new ArgumentNullException("IotcoreClient build error: http request config not set");
                        }
                    }
                    return iotcoreClient;
                }

                /// <summary>
                /// 设置认证信息参数
                /// </summary>
                /// <param name="provider">认证信息提供对象</param>
                /// <returns>iotcoreClient 构造器</returns>
                public Builder CredentialsProvider(CredentialsProvider provider)
                {
                    iotcoreClient.credentialsProvider = provider;
                    return this;
                }

                /// <summary>
                /// 设置请求环境参数
                /// </summary>
                /// <param name="environment">环境参数信息</param>
                /// <returns>iotcoreClient 构造器</returns>
                public Builder Environment(SDKEnvironment environment)
                {
                    iotcoreClient.environment = environment;
                    return this;
                }

                /// <summary>
                /// http 请求配置信息
                /// </summary>
                /// <param name="config">http 请求配置信息</param>
                /// <returns>iotcoreClient 构造器</returns>
                public Builder HttpRequestConfig(HttpRequestConfig config)
                {
                    iotcoreClient.httpRequestConfig = config;
                    return this;
                }
            }
    }
}
